﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Loja.Models;
using Loja.Business;
using Loja.Data;
using Loja.Util.FlexGrid;

namespace Loja.Controllers
{
    public class ProductController : Controller
    {
        //
        // GET: /Product/

        [NonAction]
        private void GetCategoria()
        {
            CategoriaBLL categoriaBll = new CategoriaBLL();
            ViewData["Categoria"] = categoriaBll.GetCategorias();
        }

        public JsonResult GetSubcategorias(int idCategoria)
        {
            CategoriaBLL categoriaBll = new CategoriaBLL();
            return Json(categoriaBll.GetSubcategorias(idCategoria), JsonRequestBehavior.AllowGet);
        }

        [NonAction]
        private void GetFornecedores()
        {
            FornecedorBLL fornecedorBll = new FornecedorBLL();
            ViewData["Fornecedor"] = fornecedorBll.GetFornecedor();
        }

        [NonAction]
        private void GetMarcas()
        {
            MarcaBLL marcaBll = new MarcaBLL();
            ViewData["Marca"] = marcaBll.GetMarca();
        }

        public ActionResult Index()
        {
            return View();
        }

        [NonAction]
        private void PreencherCombos()
        {
            GetCategoria();
            GetFornecedores();
            GetMarcas();
        }

        [NonAction]
        private Produto GetProduto(ProdutoModels produto)
        {
            return new Produto
            {
                Descricao = produto.Descricao,
                IdCategoria = produto.IdFornecedr,
                Codigo = produto.Codigo,
                DataCadastro = produto.DataCadastro,
                IdFornecedor = produto.IdFornecedr,
                PrecoCusto = produto.PrecoCusto,
                Percentual = produto.Precentual,
                IdMarca = produto.IdMarca,
                Tags = produto.Tags
            };

        }

        //
        // GET: /Product/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /Product/Create

        public ActionResult Create()
        {
            ViewData["Action"] = "Create";
            PreencherCombos();

            return View();
        }

        //
        // POST: /Product/Create

        [HttpPost]
        public JsonResult Create(ProdutoModels produto)
        {
            ProdutoBLL produtoBll = new ProdutoBLL();

            produto.DataCadastro = DateTime.Now;
            produtoBll.Salvar(GetProduto(produto));

            return Json(
                new 
                { 
                    success = true, 
                    erroMessage = "Favor informar o código", 
                    sucessMessage= "Novo produto inserido com sucesso!" 

                }, JsonRequestBehavior.AllowGet);
        }
     
        public JsonResult GetListaProduto()
        {
            int page = int.Parse(Request.Form["page"]);
            int rp = int.Parse(Request.Form["rp"]);

            FlexigridObject flexigridObject = ObterFlexGridObject(page, new ProdutoBLL().GetListaProduto(page, rp), string.Empty, string.Empty);
            return Json(flexigridObject, JsonRequestBehavior.AllowGet); 
        }

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        [HttpGet]
        public ActionResult Novo()
        {
            ViewData["Action"] = "Create";
            PreencherCombos();

            return PartialView("_PartialRegister", new ProdutoModels { Descricao = "TESTE DE LOAD", IdFornecedr=2 });
        }

        [NonAction]
        private FlexigridObject ObterFlexGridObject(int page, List<Produto> produtos, string sortname, string sortorder)
        {
            int total = produtos.Count();
            
            FlexigridObject flexigridObject = new FlexigridObject();
            flexigridObject.page = page;
            flexigridObject.total = total;

            foreach (var produto in produtos)
            {
                List<string> listaCampos = new List<string>();

                listaCampos.Add(produto.IdProduto.ToString());
                listaCampos.Add(produto.Codigo);
                listaCampos.Add(produto.Descricao);

                FlexigridRow cell = new FlexigridRow()
                {
                    id = produto.IdProduto.ToString(),
                    cell = listaCampos,
                };
                flexigridObject.rows.Add(cell);
            }
            return flexigridObject;
        }
    }
}
